class Solution {
    public int candy(int[] ratings) {
        /**
        左规则：当 ratings[i−1]<ratings[i]时i号学生的糖果数量将比 i−1号孩子的糖果数量多。
        右规则：当 ratings[i]>ratings[i+1]时，i号学生的糖果数量将比 i+1号孩子的糖果数量多。
        我们遍历该数组两次，处理出每一个学生分别满足左规则或右规则时，最少需要被分得的糖果数量。    每个人最终分得的糖果数量即为这两个数量的最大值。
         */
        int length = ratings.length;
        int[] ret = new int[length];
        for(int i = 0;i < length;i++) {
            if(i > 0 && ratings[i] > ratings[i-1]) {
                ret[i] = ret[i-1]+1;
            } else {
                ret[i] = 1;
            }
        }
        int sum = 0;
        int rigth = 0;
        for(int i = length-1;i >= 0;i--) {
            if(i < length-1 && ratings[i] > ratings[i+1]) {
                rigth++;
            } else {
                rigth = 1;
            }
            sum = sum + Math.max(ret[i],rigth);
        }
        return sum;
    }
}